# -*-coding:utf-8 -*-
_author_ = 'linwei'
__date__ = '2021/9/14 10:58'
'''给定数组[105, 202, 208, 300, 76, 55, 'c', 'm', 'car', '78', 100, 'm', 'n']，将这个数组拆分成包含数字和包含字符的两个数组，且要求全是数字的数组里仅包含能被3整除的数字。全是字符的数组进行排序。用两种方法实现：
（1）使用数组自带的方法进行过滤和排序
（2）使用循环来进行过滤和排序]
'''


def filterlist(args):
    # 数组拆分
    list1 = sorted([i for i in args if isinstance(i, str)])
    list2 = [i for i in args if isinstance(i, int) and i % 3 == 0]
    return list1, list2


def filterlist1(args):
    # 循环
    list3 = []
    list4 = []
    # 判断列表元素类型
    for i in range(len(args)):
        if type(args[i]) == str:
            list3.append(args[i])
        elif type(args[i]) == int and (args[i] % 3) == 0:
            list4.append(args[i])
    # 判断asci码大小
    for i in range(0, len(list3) - 1):
        for j in range(i + 1, len(list3)):
            if ord(list3[i][0:1:1]) > ord(list3[j][0:1:1]):
                tmp = list3[i]
                list3[i] = list3[j]
                list3[j] = tmp
            if ord(list3[i][0:1:1]) == ord(list3[j][0:1:1]):
                # 切片后面的长度
                a = len(list3[i][1::])
                b = len(list3[j][1::])
                # min 函数；lamba函数
                short_len = min(a, b)
                # short_len = lambda a,b: a if a < b else b
                # 如果当列表前面元素不为空，而后面为空时，需要更换位置
                if short_len == 0 and a != 0:
                    tmp = list3[i]
                    list3[i] = list3[j]
                    list3[j] = tmp
                # 判断当长度不为零时,可以遍历做比较大小
                elif short_len != 0:
                    for t in range(1, short_len - 1):
                        if list3[i][t:t + 1:1] != '' or list3[j][t:t + 1:1] != '':
                            if ord(list3[i][t:t + 1:1]) > ord(list3[j][t:t + 1:1]):
                                tmp = list3[i]
                                list3[i] = list3[j]
                                list3[j] = tmp

    return list3, list4


list = filterlist([105, 202, 208, 300, 76, 55, 'c', 'm', 'cb', 'caac', 'car', '78', 100, 'm', 'n'])
print("顺序排序的字符列表为:", list[0], ",数字列表为:", list[1])
list1 = filterlist1([105, 202, 208, 300, 76, 55, 'c', 'm', 'cb', 'caac', 'car', '78', 100, 'm', 'n'])
print("顺序排序的字符列表为:", list1[0], ",数字列表为:", list1[1])
